34

您所在的位置:网站首页 pandas 导入列表 34

34

2023-11-25 16:58| 来源: 网络整理| 查看: 265

34_Pandas对CSV文件内容的导出和添加(to_csv)

如果要将panda.DataFrame或pandas.Series数据导出为csv文件或将其添加到现有的csv文件中,请使用to_csv()方法。由于分隔符可以更改,因此也可以将其另存为tsv文件。

将描述以下内容。

使用to_csv()方法导出并保存csv文件仅导出特定列:参数columns有/无标头,索引:参数header,index编码:参数encoding分隔符:参数sep写入模式(新建,覆盖,添加):参数modefloat浮点格式:参数float_format转换为任何格式并保存

读取csv文件请参阅以下文章。

03_Pandas读取csv/tsv文件(read_csv,read_table)

以下面的数据为例。

import pandas as pd df = pd.read_csv('./data/34/sample_pandas_normal.csv', index_col=0) print(df) # age state point # name # Alice 24 NY 64 # Bob 42 CA 92 # Charlie 18 CA 70 # Dave 68 TX 70 # Ellen 24 CA 88 # Frank 30 NY 57 使用to_csv()方法导出并保存csv文件

panda.DataFrame或pandas.Series提供To_csv()方法。

将路径指定为第一个参数,则将输出csv文件。

df.to_csv('./data/34/to_csv_out.csv') 仅导出特定列:参数columns

如果只想导出特定的列,在参数列中指定列名称的列表。 默认值为“none”,所有列均输出。

df.to_csv('./data/34/to_csv_out_columns.csv', columns=['age']) 有/无标头,索引:参数header,index

在参数header和index中使用True或False指定是否指定header(列名,pandas.DataFrame的列)和index(行名,pandas.DataFrame的索引)。默认值为True。

df.to_csv('./data/34/to_csv_out_header_index.csv', header=False, index=False) 编码:参数encoding

输出文件的编码由参数编码指定。 对于Python3,默认值为utf-8。

分隔符:参数sep

分隔符由参数sep指定。 如果要将其另存为由制表符\t分隔的tsv文件,请进行以下设置。

默认值为逗号“,”。

df.to_csv('./data/34/to_csv_out.tsv', sep='\t') 写入模式(新建,覆盖,添加):参数mode

写入模式由参数mode指定。

默认值为“ w”。与前面的示例一样,如果指定的路径不存在,则将重新创建该路径,如果存在,则将其覆盖。

与内置函数open()一样,如果要防止覆盖现有文件,请设置mode =‘x’。如果指定的路径不存在,将创建一个新路径,如果存在,则将发生错误。

如果在to_csv()方法的第一个参数中指定了现有csv文件的路径后指定了mode =‘a’,则会添加该文件。仅将pandas.DataFrame的内容添加到现有文件的末尾。

显示了将相同数据添加到文件后立即保存的示例。请注意,如果未设置header = False,则将按原样添加标头(pandas.DataFrame的列)。

df.to_csv('./data/34/to_csv_out_a.csv') df.to_csv('./data/34/to_csv_out_a.csv', mode='a', header=False)

如果要从现有的csv文件中读取数据并通过代码处理将具有通过代码处理添加/更新的行和列的DataFrame写入具有相同名称的文件,则可以使用mode ='w’覆盖它(可以将其省略,因为它是默认设置)。

df.to_csv('./data/34/to_csv_out_a_new_column.csv') df = pd.read_csv('./data/34/to_csv_out_a_new_column.csv', index_col=0) print(df) # age state point # name # Alice 24 NY 64 # Bob 42 CA 92 # Charlie 18 CA 70 # Dave 68 TX 70 # Ellen 24 CA 88 # Frank 30 NY 57 df['new_col'] = 'new data' print(df) # age state point new_col # name # Alice 24 NY 64 new data # Bob 42 CA 92 new data # Charlie 18 CA 70 new data # Dave 68 TX 70 new data # Ellen 24 CA 88 new data # Frank 30 NY 57 new data df.to_csv('./data/34/to_csv_out_a_new_column.csv') float浮点格式:参数float_format

以下面的pandas.DataFrame为例。

df = pd.DataFrame({'col1': [0.123456789, 1000000000.0], 'col2': [123456789.0, 0.0], 'col3': [123456789, 0]}) print(df) # col1 col2 col3 # 0 1.234568e-01 123456789.0 123456789 # 1 1.000000e+09 0.0 0 print(df.dtypes) # col1 float64 # col2 float64 # col3 int64 # dtype: object

尽管它在print()中以指数符号显示,但这是由于显示设置所致,并且值本身未四舍五入。

print(df.iat[0, 0]) # 0.123456789 print(df.iat[1, 0]) # 1000000000.0

使用to_csv()保存时,默认情况下会保存该值。

df.to_csv('./data/34/to_csv_out_float_default.csv')

可以使用to_csv()的参数float_format指定保存时浮点数float的格式。

更改显示设置时,格式由可调用对象(例如format())指定,但是在to_csv()中,指定了printf format%中使用的格式字符串。

例如,要将小数点后的位数设置为3位,请按照以下步骤操作。

print('%.3f' % 0.123456789) # 0.123 print('%.3f' % 123456789) # 123456789.000 df.to_csv('./data/34/to_csv_out_float_format_3f.csv', float_format='%.3f')

小数点后三位数的指数表示法如下。

print('%.3e' % 0.123456789) # 1.235e-01 print('%.3e' % 123456789) # 1.235e+08 df.to_csv('./data/34/to_csv_out_float_format_3e.csv', float_format='%.3e')

如果像上面的示例一样指定并保存了位数,则自然会丢失保存位数以下的信息。

转换为任何格式并保存

顾名思义,参数float_format仅对数据类型为浮点数float的列有效。如上例所示,整数int列保持不变。另外,不能为每列指定不同的格式。

如果要指定整数int列的格式,或者要为浮点数float的每一列指定不同的格式,请将原始pandas.DataFrame转换为任何格式的字符串,然后保存。

df['col1'] = df['col1'].map('{:.3f}'.format) df['col2'] = df['col2'].map('{:.3e}'.format) df['col3'] = df['col3'].map('{:#010x}'.format) print(df) # col1 col2 col3 # 0 0.123 1.235e+08 0x075bcd15 # 1 1000000000.000 0.000e+00 0x00000000 print(df.dtypes) # col1 object # col2 object # col3 object # dtype: object df.to_csv('./data/34/to_csv_out_float_format_str.csv')

请注意,如本例所示,如果将整数int保存为十六进制数,则pd.read_csv()会将其读取为字符串。如果要将其视为数字值,则需要在读取后将其转换。

df = pd.read_csv('./data/34/to_csv_out_float_format_str.csv', index_col=0) print(df) # col1 col2 col3 # 0 1.230000e-01 123500000.0 0x075bcd15 # 1 1.000000e+09 0.0 0x00000000 print(df.dtypes) # col1 float64 # col2 float64 # col3 object # dtype: object df['col3'] = df['col3'].map(lambda x: int(x, 16)) print(df) # col1 col2 col3 # 0 1.230000e-01 123500000.0 123456789 # 1 1.000000e+09 0.0 0 print(df.dtypes) # col1 float64 # col2 float64 # col3 int64 # dtype: object


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3